package proyecto2.src.aplicacion;



import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

import proyecto2.src.entidades.Basica;
import proyecto2.src.entidades.Enemiga;
import proyecto2.src.entidades.Principal;
import proyecto2.src.entidades.exploradora;
import proyecto2.src.municiones.MunicionX;

import java.util.Random;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;



public class Nivel extends JPanel {

	protected Juego proyectoX;
	protected Principal naveJugador;
	protected JLabel fondo;
	protected int puntajeParcial;
	protected Random generador; 
	protected JLabel puntaje,vida;	


	public Nivel(Juego j) {
		super();
		proyectoX = j;		
		this.setLayout(null);
		this.setVisible(true);
		this.setBounds(0, 0, j.getWidth(), j.getHeight());
		generador = new Random();		

		//el fondo pasa a ser el lugar donde se colocarán todas las otras componentes gráficas 
		//así quedan encima del fondo		
		ImageIcon imgFondo = new ImageIcon(this.getClass().getResource("/proyecto2/sprites/space500.png"));
		fondo = new JLabel(imgFondo);
		fondo.setBounds(0, 0, j.getWidth(), j.getHeight());
		this.add(fondo);		
		this.crearPrincipal();
		puntajeParcial=0;

		puntaje= new JLabel("Puntaje: "+ puntajeParcial);
		puntaje.setBounds(5, 410,100,70);
		puntaje.setSize(100,70);
		puntaje.setForeground(Color.WHITE);
		fondo.add(puntaje);

		vida= new JLabel("Vidas: "+ naveJugador.getVida());
		vida.setBounds(5, 390,70,70);
		vida.setSize(70,70);
		vida.setForeground(Color.WHITE);
		fondo.add(vida);		
	}

	public JLabel getVidasPrincipal(){
		return vida;
	}


	public void crearEnemigo() {
		ImageIcon image = new ImageIcon(this.getClass().getResource("/proyecto2/sprites/basica.gif"));
		Enemiga m= new Basica(this,image);	
		int posX = generador.nextInt(proyectoX.getWidth()-m.getWidth())+0;
		m.setLocation(posX, 0-this.proyectoX.getHeight()+20);			
		m.setSize(image.getIconWidth(),image.getIconHeight()); 			
		this.agregarEnemiga(m);		

	}


	//creo la nave y la coloco en el panel
	private void crearPrincipal() {
		ImageIcon image = new ImageIcon(this.getClass().getResource("/proyecto2/sprites/ship2.gif"));
		naveJugador = new exploradora(10,image,this);


		//increíblemente al usar layout null hay que darle tamaño fijo a todas las componentes a pesar de que lo traen de la imagen
		naveJugador.setSize(image.getIconWidth(), image.getIconHeight());  
		inicializarPosicion();		
		fondo.add(naveJugador);
	}

	public void inicializarPosicion(){
		naveJugador.setLocation((proyectoX.getWidth()-naveJugador.getWidth())/2, proyectoX.getHeight()-naveJugador.getHeight()-50);
	}

	public void eliminarEnemiga(Enemiga e) {
		proyectoX.quitarEnemiga(e);
		fondo.remove(e);
	}


	private void agregarEnemiga(Enemiga e){
		proyectoX.agregarEnemiga(e);
		fondo.add(e);
	}


	public void eliminarTodasLasEnemigas() {
		proyectoX.eliminarTodasLasNavesEnemigas();		
	}


	public void eliminarNavePrincipal() {
		proyectoX.GameOver();	
		ImageIcon imgFondo = new ImageIcon(this.getClass().getResource("/proyecto2/sprites/GO.png"));
		proyectoX.actualizarPuntaje(puntajeParcial);
		
		JLabel Puntaje= new JLabel("Su Puntaje: "+ puntajeParcial);
		Puntaje.setBounds(200, 250,200,200);
		Font f= new Font("ARIAL",18,18);		
		Puntaje.setFont(f);
		Puntaje.setForeground(Color.WHITE);
		JLabel mensaje= new JLabel("Precione 'r' para reiniciar");
		mensaje.setFont(f);
		mensaje.setBounds(280, 350,200,200);		
		
		fondo.setIcon( imgFondo);	
		fondo.add(Puntaje);	
		fondo.add(mensaje);
		fondo.remove(puntaje);
		fondo.remove(vida);		 
	}

	public Principal obtenerNavePrincipal() {
		return naveJugador; 		
	}

	public void eliminarNaveEnemiga(Enemiga enemiga) {
		this.eliminarEnemiga(enemiga);		
	}

	public void sumarPuntaje(int punt) {
		puntajeParcial+=punt;
		puntaje.setText("Puntaje: "+puntajeParcial);
	}

	public void agregarMunicion(MunicionX mun) {
		proyectoX.agregarMunicion(mun);
		fondo.add(mun);
	}


	public void quitarMunicion(MunicionX mun) {
		proyectoX.quitarMunicion(mun);
		mun.setVisible(false);
		fondo.remove(mun);
	}

	public boolean calcularColisionConEnemigas(MunicionX m){
		return proyectoX.calculoConEnemigas(m);
	}
	public boolean calcularColisionConPrincipal(MunicionX m){
		return proyectoX.calculoConPrincipal(m);
	}

	public void eliminarGraficamente(Component c) {
		c.setEnabled(false);
		fondo.remove(c);
		fondo.repaint();
	}


}
